Application debugging
Learn about application debugging with Ozone. Discover more about features such as Terminal I/O, the Source Code Viewer and the Ozone Disassembly Window.
As a multi-platform debugger and performance analyzer, Ozone helps make the debugging process smoother and more efficient. The Source Code Viewer, windows for Disassembly, Variables/Symbols, Memory, Debug Snapshots and Registers improve your workflow.
The Ozone Source Code Viewer
The Source Code Viewer provides an overview of the application source, enabling navigation through the target application. It shows current program execution by highlighting the active source line, which lets you set source-code breakpoints to halt program execution. This in turn lets you modify program execution by letting the application run from any location.
Using the Source Code Viewer, individual source code lines can be expanded to reveal the affiliated assembly code instructions. This means easily checking the generated code for any source lines of interest without the need to jump back and forth with the Disassembly Window..
The Source Code Viewer supports syntax highlighting for C/C++ code and assembly instructions. Fonts can be changed in the preferences to fit your visual needs. You can easily adjust fonts and font size can easily be changed to fit your visual needs.
Symbol values and expressions can quickly be shown in a mouse-over tool tip. Hovering the mouse cursor over a variable displays the variable value if available. Hovering over selected text evaluates the selection as an expression and shows the result in the tool tip.
The Source Viewer’s header bar enables navigation to functions within the source code. This can be done by selecting it from a drop-down list. When a function is selected, the corresponding source line is highlighted and scrolls into view.
The Ozone Disassembly Window
Ozone's Disassembly Window displays the assembly code interpretation of the memory content. The window automatically scrolls to the position of the program counter when the program is stepped; this allows you to follow program execution on the machine instruction level.
The Disassembly Window provides two display options - Show Source and Show Labels. These display options augment instructions by providing source code and symbol information. Both information types can be separately shown or hidden.
Set Different Breakpoints
Ozone lets you set different types of breakpoints: Source breakpoints, instruction breakpoints, and data breakpoints (watchpoints). Ozone shows detailed information for each breakpoint and provides full control to modify them.
With J-Link Flash Breakpoint technology, you can set as many breakpoints as you want. There is no limit to the available number of hardware breakpoints; you don’t have to modify your application to run in RAM. Just set the breakpoints.
The Breakpoint Window displays information about set breakpoints. Source breakpoints can be expanded to show the resulting instructions upon which a breakpoint is set. Each breakpoint provides address information, its implementation (whether its hardware or software) and context for easier identification.
Breakpoints can be configured so that the debugger stops only under certain circumstances. A skip count can be set to halt only after the breakpoints have been hit X times. Or, you can enter an expression which is evaluated to only halt when its result is true. Conditions, for example, can be set to break only when an overflow variable flag is set. With OS awareness, a task filter can be applied to only halt when the target system is executing in a given task.
Variable Windows to Watch Variable Values
Ozone's symbol windows allow you to watch and edit symbols (variables and function parameters).
With the Watched Variables Window you can select which symbols to show. You can drag and drop symbols from other windows or from the Source Viewer into it or enter them manually. Watched Variables can be updated periodically, if supported by the target, while the application is running.
The Local Symbols Window shows symbols that are in the scope of the current execution point, the current function. It can display the local symbols of any function on the call stack.
The Global Variables Window shows all global and file static symbols.
Ozone Registers Windows
Ozone’s Registers Window show the current CPU registers. In addition to the basic CPU registers, Ozone can also display memory-mapped peripheral registers (SFRs).
All registers are grouped. You can expend register groups of interest. Registers with special bit flags can be further expanded to show the value and description of bit fields.
Ozone also includes change level highlighting. When the application is halted, recently changed register values are highlighted. Register values that changed last with the previous halts are highlighted, too. This feature enables you to easily identify what your application is doing.
Terminal I/O – RTT, SWO & Semihosting
Ozone supports printf-style terminal I/O from the target application. An application may send and receive text messages by employing one or multiple of the I/O techniques described below. Text output from the application is shown within the Terminal Window.
RTT (Real Time Transfer)
Ozone includes the use of SEGGER's Real Time Transfer (RTT) technology.
With RTT it is possible to output information from the target microcontroller as well as sending input to the application at a very high speed without affecting the target's real time behavior. SEGGER RTT can be used with any J-Link model and any supported target processor which allows background memory access.
SWO (Single Wire Output)
Ozone handles/works with Single Wire Output (SWO). On Cortex-M microcontrollers an additional pin on the debug interface, the SWO pin, can be used to send terminal output to the debugger.
Semihosting
Ozone is able to communicate with the application program via semihosting. Next to providing bi-directional text I/O via the Terminal Window, the application program can employ semihosting to perform advanced operations on the host PC, such as reading from files.
Ozone supports multiple semihosting standards. This includes SEGGER's own implementation, as well as the official specifications by Arm and RISC-V.